Skip to content

Conversation

@Ashutosh619-sudo
Copy link
Contributor

@Ashutosh619-sudo Ashutosh619-sudo commented Jan 19, 2026

Description

Please add PR description here, add screenshots if needed

Clickup

Please add link here
https://app.clickup.com/

Summary by CodeRabbit

  • Bug Fixes
    • Prevented creation of vendors when name sanitization yields an empty value, reducing invalid vendor records and related errors.
  • Tests
    • Added test coverage for vendor name sanitization edge cases to ensure creation is blocked when the sanitized name is empty.

✏️ Tip: You can customize this high-level summary in your review settings.

@github-actions github-actions bot added the size/XS Extra Small PR label Jan 19, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 19, 2026

Walkthrough

Adds an early guard in get_or_create_vendor to return None when the sanitized vendor_id is falsy, preventing further length enforcement or vendor creation; adds a test covering the sanitized-name empty case.

Changes

Cohort / File(s) Summary
Early validation in vendor creation
apps/sage_intacct/utils.py
Adds a guard in get_or_create_vendor to return None immediately if sanitized vendor_id is falsy, bypassing subsequent length checks and creation logic.
Tests for sanitize edge cases
tests/test_sageintacct/test_utils.py
Adds test_get_or_create_vendor_with_none_sanitized_name to assert get_or_create_vendor returns None when sanitization yields no usable name (e.g., input of only special characters).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

I nibble code with careful paws,
A nameless vendor gives me pause.
I skip the gate, return a songless 'None',
Keeping phantom entries gone and done. 🐰✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is largely incomplete, containing only placeholder text from the template without any actual implementation details, context, or explanation of the changes. Add a meaningful description explaining the vendor ID sanitization issue, why the fix is needed, and how it resolves the problem. Fill in the ClickUp link with the actual ticket URL.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Fix: Check none value before length of vendor' directly describes the main change - adding a guard to check for None/falsy vendor IDs before enforcing length limits in the get_or_create_vendor function.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

Coverage

Coverage Report
FileStmtsMissCoverMissing
apps
   exceptions.py471177%27, 33, 39–44, 50, 56–61, 67, 73, 79–80
apps/fyle
   actions.py124794%214, 263, 319–323
   constants.py10100% 
   helpers.py2352291%50–57, 66, 146–162, 376, 470, 477–480, 483–484
   models.py3322194%313–315, 319–321, 325–327, 331–333, 337–339, 343–345, 406, 510–531, 554, 571
   queue.py500100% 
   serializers.py410100% 
   signals.py35683%22, 55–56, 69–71
   tasks.py4957385%135–136, 139–140, 143–144, 166–167, 201–211, 223–228, 271–274, 295–299, 309–317, 355–356, 450–497, 781–785
   views.py1721591%84–91, 145, 245–246, 290–291, 316–320, 413–417
apps/internal
   actions.py39295%26–27
   helpers.py361364%18–35
   serializers.py300100% 
   views.py83199%39
apps/internal/services
   e2e_setup.py590100% 
   fixture_factory.py59395%218–220
apps/mappings
   constants.py20100% 
   exceptions.py71692%69–71, 79–81
   helpers.py300100% 
   models.py500100% 
   schedules.py150100% 
   serializers.py100100% 
   signals.py1111487%90–92, 127, 179–184, 190–194, 200–203, 209–210
   tasks.py1732983%117–118, 141–142, 145, 209–226, 254, 257, 260, 266, 269, 275, 314–316, 327, 399
   utils.py340100% 
   views.py46491%34–35, 114–115
apps/sage_intacct
   actions.py29486%21–22, 49–50
   connector.py8052597%133, 309, 321, 327, 403, 1414, 1713, 1840–1841, 1892–1893, 1914–1915, 1944–1945, 1953–1964, 1996–1997, 2017–2018
   dependent_fields.py2904286%345, 381–384, 413–422, 424–425, 427–429, 431–432, 434–435, 437–438, 442–444, 488, 508, 548–550, 596–598, 646–652, 656–657
   enums.py250100% 
   helpers.py56689%38–41, 58, 95
   models.py9396293%69–70, 220, 327, 334, 378, 399–416, 475, 487, 537, 543, 578, 628–630, 644–657, 668, 704, 756–757, 831, 870, 1070, 1164–1167, 1200, 1265, 1366–1386, 1464, 1480, 1590, 1936–1938, 2000
   queue.py1711691%45, 53, 58, 105, 130–133, 173, 187, 205–208, 243, 267–270, 305, 330–333
   serializers.py350100% 
   tasks.py139118587%90, 104, 137, 173–174, 178–181, 183, 186, 236, 270–271, 390–391, 397, 400, 443–444, 485–490, 555, 561, 569, 735–736, 756–757, 817–818, 822, 841, 856, 861, 866, 873, 879, 882–884, 887–890, 893–895, 915, 955–956, 1037–1038, 1042, 1063, 1078, 1084, 1087–1090, 1097, 1100–1102, 1105–1108, 1111–1113, 1132–1136, 1176–1177, 1251–1252, 1254, 1275, 1290, 1296, 1299–1302, 1309, 1312–1314, 1317–1320, 1323–1325, 1345–1349, 1388–1389, 1464–1465, 1468, 1489, 1504, 1510, 1516, 1523, 1529, 1532–1534, 1537–1540, 1543–1545, 1564, 1616–1617, 1678, 1690–1699, 1741, 1744–1749, 1752–1756, 1921–1925, 2021–2022, 2228–2238, 2241, 2250–2255, 2289–2291, 2325–2328, 2396–2400, 2409, 2498–2503, 2516, 2531, 2546
   utils.py8904895%98, 110, 113, 538–539, 718–722, 867, 878, 1184, 1186, 1202–1208, 1217–1218, 1696–1706, 1944–1948, 1976–1980, 2008–2012, 2056–2060, 2114–2118, 2139, 2148, 2157, 2166–2167, 2178, 2201–2203
   views.py1453377%127–129, 134–135, 141–142, 185–188, 258–288, 299–314, 327–331
apps/sage_intacct/errors
   errors.py20100% 
   helpers.py47198%80
apps/sage_intacct/exports
   ap_payments.py130100% 
   bills.py280100% 
   charge_card_transactions.py220100% 
   expense_reports.py280100% 
   helpers.py56296%68, 141
   journal_entries.py76889%177–180, 316–319
   reimbursements.py130100% 
apps/tasks
   models.py690100% 
   serializers.py60100% 
   views.py370100% 
apps/users
   helpers.py120100% 
   models.py530100% 
   views.py170100% 
apps/workspaces
   actions.py46980%65, 84–85, 103, 122–133, 147
   enums.py60100% 
   helpers.py80100% 
   models.py1760100% 
   permissions.py34974%33, 59–67
   serializers.py43198%54
   signals.py310100% 
   tasks.py165995%53–59, 187–194, 235, 267–268, 379
   utils.py90100% 
   views.py319997%107–109, 136–139, 663–664
apps/workspaces/apis/advanced_settings
   serializers.py80396%260, 263, 266
   triggers.py100100% 
   views.py110100% 
apps/workspaces/apis/errors
   serializers.py200100% 
   views.py150100% 
apps/workspaces/apis/export_settings
   helpers.py730100% 
   serializers.py103397%267, 270, 273
   triggers.py39295%32–33
   views.py110100% 
apps/workspaces/apis/import_settings
   serializers.py1411887%232–238, 243–249, 257–265, 283, 286, 314, 317–318, 326
   triggers.py47198%31
   views.py330100% 
fyle_integrations_imports
   dataclasses.py310100% 
   models.py230100% 
   queues.py34585%24, 99, 136, 148–149
   signals.py100100% 
   tasks.py1247837%68–105, 114–120, 133–202, 206–221, 246–249, 251, 253, 258
fyle_integrations_imports/modules
   base.py1881095%75, 91–92, 95, 126, 230–231, 237–238, 351
   categories.py1773381%80, 96, 99–100, 103–104, 272–273, 283, 296, 298, 342, 351–355, 364–410
   cost_centers.py961288%132–133, 152–153, 162, 178, 180, 226, 235–239
   expense_custom_fields.py121794%83–88, 247, 263, 265, 294
   merchants.py1062576%80–83, 111–129, 155–162, 179–180, 190, 203, 205, 235, 238–242
   projects.py88990%109–110, 120, 144, 191, 205–209
   tax_groups.py180100% 
   webhook_attributes.py130695%98, 100–102, 213–214
workers
   actions.py210100% 
   helpers.py420100% 
   worker.py56591%44–45, 77–78, 125
TOTAL1032091391% 

Tests Skipped Failures Errors Time
713 0 💤 0 ❌ 0 🔥 51.634s ⏱️

@github-actions
Copy link

Failure. Coverage is below 90%.

Diff Coverage
Diff: origin/master..HEAD, staged and unstaged changes

apps/sage_intacct/utils.py (50.0%): Missing lines 1184

Total: 2 lines
Missing: 1 line
Coverage: 50%

@github-actions
Copy link

Coverage

Coverage Report
FileStmtsMissCoverMissing
apps
   exceptions.py471177%27, 33, 39–44, 50, 56–61, 67, 73, 79–80
apps/fyle
   actions.py124794%214, 263, 319–323
   constants.py10100% 
   helpers.py2352291%50–57, 66, 146–162, 376, 470, 477–480, 483–484
   models.py3322194%313–315, 319–321, 325–327, 331–333, 337–339, 343–345, 406, 510–531, 554, 571
   queue.py500100% 
   serializers.py410100% 
   signals.py35683%22, 55–56, 69–71
   tasks.py4957385%135–136, 139–140, 143–144, 166–167, 201–211, 223–228, 271–274, 295–299, 309–317, 355–356, 450–497, 781–785
   views.py1721591%84–91, 145, 245–246, 290–291, 316–320, 413–417
apps/internal
   actions.py39295%26–27
   helpers.py361364%18–35
   serializers.py300100% 
   views.py83199%39
apps/internal/services
   e2e_setup.py590100% 
   fixture_factory.py59395%218–220
apps/mappings
   constants.py20100% 
   exceptions.py71692%69–71, 79–81
   helpers.py300100% 
   models.py500100% 
   schedules.py150100% 
   serializers.py100100% 
   signals.py1111487%90–92, 127, 179–184, 190–194, 200–203, 209–210
   tasks.py1732983%117–118, 141–142, 145, 209–226, 254, 257, 260, 266, 269, 275, 314–316, 327, 399
   utils.py340100% 
   views.py46491%34–35, 114–115
apps/sage_intacct
   actions.py29486%21–22, 49–50
   connector.py8052597%133, 309, 321, 327, 403, 1414, 1713, 1840–1841, 1892–1893, 1914–1915, 1944–1945, 1953–1964, 1996–1997, 2017–2018
   dependent_fields.py2904286%345, 381–384, 413–422, 424–425, 427–429, 431–432, 434–435, 437–438, 442–444, 488, 508, 548–550, 596–598, 646–652, 656–657
   enums.py250100% 
   helpers.py56689%38–41, 58, 95
   models.py9396293%69–70, 220, 327, 334, 378, 399–416, 475, 487, 537, 543, 578, 628–630, 644–657, 668, 704, 756–757, 831, 870, 1070, 1164–1167, 1200, 1265, 1366–1386, 1464, 1480, 1590, 1936–1938, 2000
   queue.py1711691%45, 53, 58, 105, 130–133, 173, 187, 205–208, 243, 267–270, 305, 330–333
   serializers.py350100% 
   tasks.py139118587%90, 104, 137, 173–174, 178–181, 183, 186, 236, 270–271, 390–391, 397, 400, 443–444, 485–490, 555, 561, 569, 735–736, 756–757, 817–818, 822, 841, 856, 861, 866, 873, 879, 882–884, 887–890, 893–895, 915, 955–956, 1037–1038, 1042, 1063, 1078, 1084, 1087–1090, 1097, 1100–1102, 1105–1108, 1111–1113, 1132–1136, 1176–1177, 1251–1252, 1254, 1275, 1290, 1296, 1299–1302, 1309, 1312–1314, 1317–1320, 1323–1325, 1345–1349, 1388–1389, 1464–1465, 1468, 1489, 1504, 1510, 1516, 1523, 1529, 1532–1534, 1537–1540, 1543–1545, 1564, 1616–1617, 1678, 1690–1699, 1741, 1744–1749, 1752–1756, 1921–1925, 2021–2022, 2228–2238, 2241, 2250–2255, 2289–2291, 2325–2328, 2396–2400, 2409, 2498–2503, 2516, 2531, 2546
   utils.py8904895%98, 110, 113, 538–539, 718–722, 867, 878, 1184, 1186, 1202–1208, 1217–1218, 1696–1706, 1944–1948, 1976–1980, 2008–2012, 2056–2060, 2114–2118, 2139, 2148, 2157, 2166–2167, 2178, 2201–2203
   views.py1453377%127–129, 134–135, 141–142, 185–188, 258–288, 299–314, 327–331
apps/sage_intacct/errors
   errors.py20100% 
   helpers.py47198%80
apps/sage_intacct/exports
   ap_payments.py130100% 
   bills.py280100% 
   charge_card_transactions.py220100% 
   expense_reports.py280100% 
   helpers.py56296%68, 141
   journal_entries.py76889%177–180, 316–319
   reimbursements.py130100% 
apps/tasks
   models.py690100% 
   serializers.py60100% 
   views.py370100% 
apps/users
   helpers.py120100% 
   models.py530100% 
   views.py170100% 
apps/workspaces
   actions.py46980%65, 84–85, 103, 122–133, 147
   enums.py60100% 
   helpers.py80100% 
   models.py1760100% 
   permissions.py34974%33, 59–67
   serializers.py43198%54
   signals.py310100% 
   tasks.py165995%53–59, 187–194, 235, 267–268, 379
   utils.py90100% 
   views.py319997%107–109, 136–139, 663–664
apps/workspaces/apis/advanced_settings
   serializers.py80396%260, 263, 266
   triggers.py100100% 
   views.py110100% 
apps/workspaces/apis/errors
   serializers.py200100% 
   views.py150100% 
apps/workspaces/apis/export_settings
   helpers.py730100% 
   serializers.py103397%267, 270, 273
   triggers.py39295%32–33
   views.py110100% 
apps/workspaces/apis/import_settings
   serializers.py1411887%232–238, 243–249, 257–265, 283, 286, 314, 317–318, 326
   triggers.py47198%31
   views.py330100% 
fyle_integrations_imports
   dataclasses.py310100% 
   models.py230100% 
   queues.py34585%24, 99, 136, 148–149
   signals.py100100% 
   tasks.py1247837%68–105, 114–120, 133–202, 206–221, 246–249, 251, 253, 258
fyle_integrations_imports/modules
   base.py1881095%75, 91–92, 95, 126, 230–231, 237–238, 351
   categories.py1773381%80, 96, 99–100, 103–104, 272–273, 283, 296, 298, 342, 351–355, 364–410
   cost_centers.py961288%132–133, 152–153, 162, 178, 180, 226, 235–239
   expense_custom_fields.py121794%83–88, 247, 263, 265, 294
   merchants.py1062576%80–83, 111–129, 155–162, 179–180, 190, 203, 205, 235, 238–242
   projects.py88990%109–110, 120, 144, 191, 205–209
   tax_groups.py180100% 
   webhook_attributes.py130695%98, 100–102, 213–214
workers
   actions.py210100% 
   helpers.py420100% 
   worker.py56591%44–45, 77–78, 125
TOTAL1032091391% 

Tests Skipped Failures Errors Time
714 0 💤 1 ❌ 0 🔥 50.389s ⏱️

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@tests/test_sageintacct/test_utils.py`:
- Around line 1401-1415: The test function
test_get_or_create_vendor_with_none_sanitized_name currently declares an unused
db fixture which triggers Ruff ARG001; fix by either removing the db parameter
and adding `@pytest.mark.django_db` above the function (and import pytest if
missing) so the test still has DB access, or keep the db parameter and silence
Ruff by appending a targeted noqa to the function definition (e.g., def
test_get_or_create_vendor_with_none_sanitized_name(db):  # noqa: ARG001); choose
one approach and apply it consistently.

Comment on lines 1401 to 1415
def test_get_or_create_vendor_with_none_sanitized_name(db):
"""
Test get or create vendor returns None when sanitize_vendor_name returns None
"""
workspace_id = 1
intacct_credentials = SageIntacctCredential.objects.get(workspace_id=workspace_id)
sage_intacct_connection = SageIntacctConnector(credentials_object=intacct_credentials, workspace_id=workspace_id)

# Test with None vendor name - should return None
vendor = sage_intacct_connection.get_or_create_vendor(None, create=True)
assert vendor is None

# Test with vendor name that becomes empty after sanitization (only special chars)
vendor = sage_intacct_connection.get_or_create_vendor('!@#$%^&*()', create=True)
assert vendor is None
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Silence Ruff ARG001 for unused db fixture.

The new test doesn’t use db, so Ruff will keep flagging Line 1401. Either remove the fixture and mark the test as django_db, or add a targeted noqa.

💡 Suggested fix (mark + remove unused arg)
+@pytest.mark.django_db
-def test_get_or_create_vendor_with_none_sanitized_name(db):
+def test_get_or_create_vendor_with_none_sanitized_name():
🧰 Tools
🪛 Ruff (0.14.13)

1401-1401: Unused function argument: db

(ARG001)

🤖 Prompt for AI Agents
In `@tests/test_sageintacct/test_utils.py` around lines 1401 - 1415, The test
function test_get_or_create_vendor_with_none_sanitized_name currently declares
an unused db fixture which triggers Ruff ARG001; fix by either removing the db
parameter and adding `@pytest.mark.django_db` above the function (and import
pytest if missing) so the test still has DB access, or keep the db parameter and
silence Ruff by appending a targeted noqa to the function definition (e.g., def
test_get_or_create_vendor_with_none_sanitized_name(db):  # noqa: ARG001); choose
one approach and apply it consistently.

@github-actions github-actions bot added size/S Small PR and removed size/XS Extra Small PR labels Jan 19, 2026
@github-actions
Copy link

Coverage

Coverage Report
FileStmtsMissCoverMissing
apps
   exceptions.py471177%27, 33, 39–44, 50, 56–61, 67, 73, 79–80
apps/fyle
   actions.py124794%214, 263, 319–323
   constants.py10100% 
   helpers.py2352291%50–57, 66, 146–162, 376, 470, 477–480, 483–484
   models.py3322194%313–315, 319–321, 325–327, 331–333, 337–339, 343–345, 406, 510–531, 554, 571
   queue.py500100% 
   serializers.py410100% 
   signals.py35683%22, 55–56, 69–71
   tasks.py4957385%135–136, 139–140, 143–144, 166–167, 201–211, 223–228, 271–274, 295–299, 309–317, 355–356, 450–497, 781–785
   views.py1721591%84–91, 145, 245–246, 290–291, 316–320, 413–417
apps/internal
   actions.py39295%26–27
   helpers.py361364%18–35
   serializers.py300100% 
   views.py83199%39
apps/internal/services
   e2e_setup.py590100% 
   fixture_factory.py59395%218–220
apps/mappings
   constants.py20100% 
   exceptions.py71692%69–71, 79–81
   helpers.py300100% 
   models.py500100% 
   schedules.py150100% 
   serializers.py100100% 
   signals.py1111487%90–92, 127, 179–184, 190–194, 200–203, 209–210
   tasks.py1732983%117–118, 141–142, 145, 209–226, 254, 257, 260, 266, 269, 275, 314–316, 327, 399
   utils.py340100% 
   views.py46491%34–35, 114–115
apps/sage_intacct
   actions.py29486%21–22, 49–50
   connector.py8052597%133, 309, 321, 327, 403, 1414, 1713, 1840–1841, 1892–1893, 1914–1915, 1944–1945, 1953–1964, 1996–1997, 2017–2018
   dependent_fields.py2904286%345, 381–384, 413–422, 424–425, 427–429, 431–432, 434–435, 437–438, 442–444, 488, 508, 548–550, 596–598, 646–652, 656–657
   enums.py250100% 
   helpers.py56689%38–41, 58, 95
   models.py9396293%69–70, 220, 327, 334, 378, 399–416, 475, 487, 537, 543, 578, 628–630, 644–657, 668, 704, 756–757, 831, 870, 1070, 1164–1167, 1200, 1265, 1366–1386, 1464, 1480, 1590, 1936–1938, 2000
   queue.py1711691%45, 53, 58, 105, 130–133, 173, 187, 205–208, 243, 267–270, 305, 330–333
   serializers.py350100% 
   tasks.py139118587%90, 104, 137, 173–174, 178–181, 183, 186, 236, 270–271, 390–391, 397, 400, 443–444, 485–490, 555, 561, 569, 735–736, 756–757, 817–818, 822, 841, 856, 861, 866, 873, 879, 882–884, 887–890, 893–895, 915, 955–956, 1037–1038, 1042, 1063, 1078, 1084, 1087–1090, 1097, 1100–1102, 1105–1108, 1111–1113, 1132–1136, 1176–1177, 1251–1252, 1254, 1275, 1290, 1296, 1299–1302, 1309, 1312–1314, 1317–1320, 1323–1325, 1345–1349, 1388–1389, 1464–1465, 1468, 1489, 1504, 1510, 1516, 1523, 1529, 1532–1534, 1537–1540, 1543–1545, 1564, 1616–1617, 1678, 1690–1699, 1741, 1744–1749, 1752–1756, 1921–1925, 2021–2022, 2228–2238, 2241, 2250–2255, 2289–2291, 2325–2328, 2396–2400, 2409, 2498–2503, 2516, 2531, 2546
   utils.py8904795%98, 110, 113, 538–539, 718–722, 867, 878, 1186, 1202–1208, 1217–1218, 1696–1706, 1944–1948, 1976–1980, 2008–2012, 2056–2060, 2114–2118, 2139, 2148, 2157, 2166–2167, 2178, 2201–2203
   views.py1453377%127–129, 134–135, 141–142, 185–188, 258–288, 299–314, 327–331
apps/sage_intacct/errors
   errors.py20100% 
   helpers.py47198%80
apps/sage_intacct/exports
   ap_payments.py130100% 
   bills.py280100% 
   charge_card_transactions.py220100% 
   expense_reports.py280100% 
   helpers.py56296%68, 141
   journal_entries.py76889%177–180, 316–319
   reimbursements.py130100% 
apps/tasks
   models.py690100% 
   serializers.py60100% 
   views.py370100% 
apps/users
   helpers.py120100% 
   models.py530100% 
   views.py170100% 
apps/workspaces
   actions.py46980%65, 84–85, 103, 122–133, 147
   enums.py60100% 
   helpers.py80100% 
   models.py1760100% 
   permissions.py34974%33, 59–67
   serializers.py43198%54
   signals.py310100% 
   tasks.py165995%53–59, 187–194, 235, 267–268, 379
   utils.py90100% 
   views.py319997%107–109, 136–139, 663–664
apps/workspaces/apis/advanced_settings
   serializers.py80396%260, 263, 266
   triggers.py100100% 
   views.py110100% 
apps/workspaces/apis/errors
   serializers.py200100% 
   views.py150100% 
apps/workspaces/apis/export_settings
   helpers.py730100% 
   serializers.py103397%267, 270, 273
   triggers.py39295%32–33
   views.py110100% 
apps/workspaces/apis/import_settings
   serializers.py1411887%232–238, 243–249, 257–265, 283, 286, 314, 317–318, 326
   triggers.py47198%31
   views.py330100% 
fyle_integrations_imports
   dataclasses.py310100% 
   models.py230100% 
   queues.py34585%24, 99, 136, 148–149
   signals.py100100% 
   tasks.py1247837%68–105, 114–120, 133–202, 206–221, 246–249, 251, 253, 258
fyle_integrations_imports/modules
   base.py1881095%75, 91–92, 95, 126, 230–231, 237–238, 351
   categories.py1773381%80, 96, 99–100, 103–104, 272–273, 283, 296, 298, 342, 351–355, 364–410
   cost_centers.py961288%132–133, 152–153, 162, 178, 180, 226, 235–239
   expense_custom_fields.py121794%83–88, 247, 263, 265, 294
   merchants.py1062576%80–83, 111–129, 155–162, 179–180, 190, 203, 205, 235, 238–242
   projects.py88990%109–110, 120, 144, 191, 205–209
   tax_groups.py180100% 
   webhook_attributes.py130695%98, 100–102, 213–214
workers
   actions.py210100% 
   helpers.py420100% 
   worker.py56591%44–45, 77–78, 125
TOTAL1032091291% 

Tests Skipped Failures Errors Time
714 0 💤 0 ❌ 0 🔥 50.008s ⏱️

@github-actions
Copy link


Diff Coverage
Diff: origin/master..HEAD, staged and unstaged changes

apps/sage_intacct/utils.py (100%)

Total: 2 lines
Missing: 0 lines
Coverage: 100%

@Ashutosh619-sudo Ashutosh619-sudo merged commit 84c2f75 into master Jan 19, 2026
6 checks passed
Ashutosh619-sudo added a commit that referenced this pull request Jan 19, 2026
* Fix: Check none value before length of vendor

* added test

* fixed test

---------

Co-authored-by: Ashutosh619-sudo <[email protected]>
Ashutosh619-sudo added a commit that referenced this pull request Jan 19, 2026
* Fix: Check none value before length of vendor

* added test

* fixed test

---------

Co-authored-by: Ashutosh619-sudo <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/S Small PR

Development

Successfully merging this pull request may close these issues.

2 participants